home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Bank smakow / BankSmakow.air / BankSmakow.swf / scripts / air / update / net / FileDownloader.as
Text File  |  2009-12-16  |  6KB  |  196 lines

  1. package air.update.net
  2. {
  3.    import air.update.events.DownloadErrorEvent;
  4.    import air.update.events.UpdateEvent;
  5.    import air.update.logging.Logger;
  6.    import air.update.utils.Constants;
  7.    import air.update.utils.NetUtils;
  8.    import flash.errors.EOFError;
  9.    import flash.errors.IOError;
  10.    import flash.events.ErrorEvent;
  11.    import flash.events.Event;
  12.    import flash.events.EventDispatcher;
  13.    import flash.events.HTTPStatusEvent;
  14.    import flash.events.IOErrorEvent;
  15.    import flash.events.ProgressEvent;
  16.    import flash.events.SecurityErrorEvent;
  17.    import flash.filesystem.File;
  18.    import flash.filesystem.FileMode;
  19.    import flash.filesystem.FileStream;
  20.    import flash.net.URLRequest;
  21.    import flash.net.URLStream;
  22.    import flash.utils.ByteArray;
  23.    
  24.    public class FileDownloader extends EventDispatcher
  25.    {
  26.       
  27.       private static var logger:Logger = Logger.getLogger("air.update.net.FileDownloader");
  28.        
  29.       
  30.       private var downloadedFile:File;
  31.       
  32.       private var urlStream:URLStream;
  33.       
  34.       private var fileURL:URLRequest;
  35.       
  36.       private var isInError:Boolean;
  37.       
  38.       private var fileStream:FileStream;
  39.       
  40.       public function FileDownloader(param1:URLRequest, param2:File)
  41.       {
  42.          super();
  43.          fileURL = param1;
  44.          fileURL.useCache = false;
  45.          downloadedFile = param2;
  46.          logger.finer("url: " + param1.url + " file: " + param2.nativePath);
  47.          urlStream = new URLStream();
  48.          urlStream.addEventListener(IOErrorEvent.IO_ERROR,onDownloadError);
  49.          urlStream.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onDownloadError);
  50.          urlStream.addEventListener(ProgressEvent.PROGRESS,onDownloadProgress);
  51.          urlStream.addEventListener(Event.OPEN,onDownloadOpen);
  52.          urlStream.addEventListener(Event.COMPLETE,onDownloadComplete);
  53.          urlStream.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS,onDownloadResponseStatus);
  54.       }
  55.       
  56.       private function onDownloadComplete(param1:Event) : void
  57.       {
  58.          while(urlStream && urlStream.bytesAvailable)
  59.          {
  60.             saveBytes();
  61.          }
  62.          if(urlStream && urlStream.connected)
  63.          {
  64.             urlStream.close();
  65.             urlStream = null;
  66.          }
  67.          fileStream.close();
  68.          fileStream = null;
  69.          if(!isInError)
  70.          {
  71.             dispatchEvent(new UpdateEvent(UpdateEvent.DOWNLOAD_COMPLETE));
  72.          }
  73.       }
  74.       
  75.       public function cancel() : void
  76.       {
  77.          try
  78.          {
  79.             if(urlStream && urlStream.connected)
  80.             {
  81.                urlStream.close();
  82.             }
  83.             if(fileStream)
  84.             {
  85.                fileStream.close();
  86.                fileStream = null;
  87.             }
  88.             if(downloadedFile && downloadedFile.exists)
  89.             {
  90.                downloadedFile.deleteFile();
  91.             }
  92.          }
  93.          catch(e:Error)
  94.          {
  95.             logger.fine("Error during canceling the download: " + e);
  96.          }
  97.       }
  98.       
  99.       public function download() : void
  100.       {
  101.          urlStream.load(fileURL);
  102.       }
  103.       
  104.       private function onDownloadResponseStatus(param1:HTTPStatusEvent) : void
  105.       {
  106.          logger.fine("DownloadStatus: " + param1.status);
  107.          if(!NetUtils.isHTTPStatusAcceptable(param1.status))
  108.          {
  109.             dispatchErrorEvent("Invalid HTTP status code: " + param1.status,Constants.ERROR_INVALID_HTTP_STATUS,param1.status);
  110.          }
  111.       }
  112.       
  113.       public function inProgress() : Boolean
  114.       {
  115.          return urlStream.connected;
  116.       }
  117.       
  118.       private function dispatchErrorEvent(param1:String, param2:int = 0, param3:int = 0) : void
  119.       {
  120.          isInError = true;
  121.          if(urlStream && urlStream.connected)
  122.          {
  123.             urlStream.close();
  124.             urlStream = null;
  125.          }
  126.          dispatchEvent(new DownloadErrorEvent(DownloadErrorEvent.DOWNLOAD_ERROR,false,false,param1,param2,param3));
  127.       }
  128.       
  129.       private function saveBytes() : void
  130.       {
  131.          var bytes:ByteArray = null;
  132.          if(!fileStream || !urlStream || !urlStream.connected)
  133.          {
  134.             return;
  135.          }
  136.          try
  137.          {
  138.             bytes = new ByteArray();
  139.             urlStream.readBytes(bytes,0,urlStream.bytesAvailable);
  140.             fileStream.writeBytes(bytes);
  141.          }
  142.          catch(error:EOFError)
  143.          {
  144.             isInError = true;
  145.             logger.fine("EOFError: " + error);
  146.             dispatchErrorEvent(error.message,Constants.ERROR_EOF_DOWNLOAD,error.errorID);
  147.          }
  148.          catch(err:IOError)
  149.          {
  150.             isInError = true;
  151.             logger.fine("IOError: " + err);
  152.             dispatchErrorEvent(err.message,Constants.ERROR_IO_FILE,err.errorID);
  153.          }
  154.       }
  155.       
  156.       private function onDownloadError(param1:ErrorEvent) : void
  157.       {
  158.          if(param1 is IOErrorEvent)
  159.          {
  160.             dispatchErrorEvent(param1.text,Constants.ERROR_IO_DOWNLOAD,param1.errorID);
  161.          }
  162.          else if(param1 is SecurityErrorEvent)
  163.          {
  164.             dispatchErrorEvent(param1.text,Constants.ERROR_SECURITY,param1.errorID);
  165.          }
  166.       }
  167.       
  168.       private function onDownloadOpen(param1:Event) : void
  169.       {
  170.          var event:Event = param1;
  171.          fileStream = new FileStream();
  172.          try
  173.          {
  174.             fileStream.open(downloadedFile,FileMode.WRITE);
  175.          }
  176.          catch(e:Error)
  177.          {
  178.             logger.fine("Error opening file on disk: " + e);
  179.             isInError = true;
  180.             dispatchErrorEvent(e.message,Constants.ERROR_IO_FILE,e.errorID);
  181.             return;
  182.          }
  183.          dispatchEvent(new UpdateEvent(UpdateEvent.DOWNLOAD_START,false,false));
  184.       }
  185.       
  186.       private function onDownloadProgress(param1:ProgressEvent) : void
  187.       {
  188.          if(!isInError)
  189.          {
  190.             saveBytes();
  191.             dispatchEvent(param1);
  192.          }
  193.       }
  194.    }
  195. }
  196.